package com.zp.self.module.level_4_算法练习.数学.位运算;

/**
 * @author By ZengPeng
 */
public class 力扣_461_汉明距离 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_461_汉明距离().hammingDistance(1,4));
        System.out.println(new 力扣_461_汉明距离().hammingDistance(3,1));
    }

    /**
     * 题目：两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
     * 给你两个整数 x 和 y，计算并返回它们之间的汉明距离。
     * 示例 1：
     * 输入：x = 1, y = 4
     * 输出：2
     * 解释：
     * 1   (0 0 0 1)
     * 4   (0 1 0 0)
     *        ↑   ↑
     * 上面的箭头指出了对应二进制位不同的位置。
     *
     * 示例 2：
     * 输入：x = 3, y = 1
     * 输出：1
     *
     * 分析：【perfect】
     *      1.异或 、  再&1  得到1的个数,即：对应二进制位不同的位置
     *
     * 边界值 & 注意点：
     *      1.
     **/
    public int hammingDistance(int x, int y) {
        x=x^y;
        int count =0;
        while (x>0){
            if((x&1)==1)count++;
            x = x>>1;
        }
        return count;
    }
}
